﻿using Zhaoxi.SqlSugarAdvanced;
using Zhaoxi.SqlSugarAdvanced.SaasSubDatabase;

try
{
    #region 001:迁移和映射
    {
        MigrationInfo.DbFirstShow(); // DbFirst - 快速把数据库表生成实体类
        //MigrationInfo.CodeFirstShow();        //CodeFirst - 快速把实体类生成数据库表
        //MigrationInfo.CodeFirstIndexShow();   //创建表中的各种索引支持
    }
    #endregion

    #region 002:库表管理-数据库表的各种修改操作
    {
        //LibraryTableInfo.Show();
    }
    #endregion

    #region 003:增删改操作
    {
        ////新增
        //WriteOperationInfo.AddData();

        ////修改
        //WriteOperationInfo.UpdateData();

        ////删除
        //WriteOperationInfo.DeleteData();

        //// 过滤器与软删除示例
        //FilterInfo.Show();

        //// 存在更新，不存在插入
        //WriteOperationInfo.AddOrUpdate();

        //// 简单查询 - 单表查询
        QueryOperationInfo.SimpleQueryShow();

        ////链接查询 - 多表关联查询
        //QueryOperationInfo.LinkQueryShow();

        ////复杂查询-嵌套查询
        //QueryOperationInfo.ComplexQueryShow();

        //////导航属性 一对一、一对多、多对一、多对多-多层级的数据操作
        //QueryOperationInfo.NavigationPropertiesShow();

        ////表达式目录树和树Tree查询
        //QueryOperationInfo.TreeAndExpressionQuery();

        ////跨库查询
        //QueryOperationInfo.CrossDatabaseQuery();

        ////报表查询 - 提供的统计报表月份有限 - 作用不大
        //QueryOperationInfo.ReportQuery();
    }
    #endregion

    #region 进阶功能
    {
        ////生命周期 - 理论知识
        //AdvancedFeatures.LifeTimeManager();

        //执行Sql
        //AdvancedFeatures.ExecSql();

        ////导入数据+验证 - 导入报表时会用到
        //AdvancedFeatures.ExportData();

        ////并发控制、更新、版本控制 - 简单了解一下 - 用的时候在深入研究
        //AdvancedFeatures.ConcurrencyControl();

        //悲观锁 锁表操作期间别人不能用
        //AdvancedFeatures.PessimismLock();

        //////单库事务
        //TransactionManager.SingleDatabase();

        //////跨库事务SqlSugarClient实现
        ////TransactionManager.MultipleDatabaseSqlSugarClient();

        ////跨库事务ISqlSugarClient实现
        ////TransactionManager.MultipleDatabaseISqlSugarClient();

        ////事务语法糖 - 开启事务语法糖 - 推荐使用
        //TransactionManager.TransactionSyntaxSugar();

        ////打包操作 - 只能在一个数据库使用 - 不适合批量插入 类似于事务
        //TransactionManager.PacAndSubmit();

        ////AOP支持 - 这个还是比较实用的 - 可以用来记录执行报错的sql
        //AopManager.Show();

        ////二级缓存 - 一些全局通用的配置表可以使用缓存
        //L2Cache.Show();

        ////读写分离 - cs端项目一般用不上 - 主要是再配置，并不难很简单。
        //ReadWriteSeparation.Show();

        //////分表 
        //SplitTables.Show();

        ////Saas分库 - 
        //SubDatabaseInfo.Show();

        //Saas分库设计案例
        new OrderManger().Test();


    }
    #endregion

}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}
